/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import gamebook.UsuarioGenerico;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author JAVA
 */
public class amistadServlet extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        //Cogemos el valor de opcion
        String opcion = request.getParameter("opcion");
        //Ruta para cualquier sendRedirect
        String ruta = getServletContext().getContextPath();
        try {
            if (opcion != null) {
                HttpSession sesion = request.getSession();
                UsuarioGenerico usuarioSesion = (UsuarioGenerico) sesion.getAttribute("usuario");
                if (opcion.equals("invitarAmigo")) {
                    //Invitar amigo implica coger los dos usuarios implicados y cambiar la tabla de amistad
                    try {
                        int id = Integer.parseInt(request.getParameter("idUser"));
                        UsuarioGenerico usuarioDestino = UsuarioGenerico.getUsuarioPorId(id);
                        if (usuarioSesion.invitar(usuarioDestino)) {
                            response.sendRedirect(ruta + "/gente.jsp?opcion=invitacionEnviada");
                        } else {
                            response.sendRedirect(ruta + "/gente.jsp?opcion=errorInvitacionYaEnCurso");
                        }
                    } catch (Exception e) {
                        out.println("Error:" + e.getMessage());
                    }
                } else if (opcion.equals("borrarAmigo")) {
                    if (request.getParameter("paso").equals("1")) {
                        //Abre Ventana Confirmacion 
                        try {
                            int id = Integer.parseInt(request.getParameter("idUser"));
                            UsuarioGenerico usuarioEliminar = UsuarioGenerico.getUsuarioPorId(id);
                            request.setAttribute("usuarioEliminar", usuarioEliminar);
                            request.getRequestDispatcher("/gente.jsp").forward(request, response);
                            //abreVentana
                        } catch (Exception e) {
                            out.println("Error:" + e.getMessage());
                        }
                    } else if (request.getParameter("paso").equals("2")) {
                        //Confirma Borrado en BD
                        try {
                            int id = Integer.parseInt(request.getParameter("idUser"));
                            UsuarioGenerico usuarioEliminar = UsuarioGenerico.getUsuarioPorId(id);
                            usuarioSesion.borraAmigo(usuarioEliminar);
                            response.sendRedirect(ruta + "/clientServlet?opcion=irAGente");

                        } catch (Exception e) {
                            out.println("Error:" + e.getMessage());
                        }
                    }
                } else if (opcion.equals("abreInvitacion")) {
                    //Para obtener una lista de las invitaciones recibidas y pasar al muro con ellas
                    List<UsuarioGenerico> listUsuarioInvitador = usuarioSesion.seleccionarUsuariosGenericosQueInvitaron();
                    if (listUsuarioInvitador != null) {
                        //Si hay peticiones las unimos al request para utilizarlas en el muro (izquierda.jsp)
                        request.setAttribute("listUsuarioInvitador", listUsuarioInvitador);
                        request.getRequestDispatcher("/muro.jsp").forward(request, response);
                    } else {
                        throw new Exception("Usuario que invita es nulo");
                    }
                } else if (opcion.equals("aceptarInvitacion")) {
                    //Para obtener una lista de las invitaciones recibidas y pasar al muro con ellas
                    List<UsuarioGenerico> listUsuarioInvitador = usuarioSesion.seleccionarUsuariosGenericosQueInvitaron();
                    //Ahora cogemos cada id y pedimos el parametro: "invitacionN" (N: id del usuario que invita)
                    for (UsuarioGenerico usuarioInvitador : listUsuarioInvitador) {
                        //Verificamos que el la petición está el valor "invitacionN"
                        if (request.getParameter("invitacion" + usuarioInvitador.getId()) != null) {
                            //Si el parámetro existe cogemos el valor que será (0:nada 1:aceptar 2:rechazar)
                            int respuesta = 0;
                            try {
                                respuesta = Integer.parseInt(request.getParameter("invitacion" + usuarioInvitador.getId()));
                            } catch (Exception ex) {
                                respuesta = 0;
                            }
                            //Hacemos lo que sea según el valor de la invitacion (0:nada 1:aceptar 2:rechazar)
                            if (respuesta == 1) {
                                usuarioSesion.respuestaInvitacion(usuarioInvitador, true);
                            } else if (respuesta == 2) {
                                usuarioSesion.respuestaInvitacion(usuarioInvitador, false);
                            }
                        }

                    }
                    //Ya hemos manejado todas las amistades, volvemos al muro
                    response.sendRedirect(ruta + "/muro.jsp");
                }
            }
        } catch (Exception e) {
            out.println("Error: Amistad Servlet " + e.getMessage());
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
